The field of the present invention pertains to the initialization functions and routines of x86 computer systems. More particularly, the present invention pertains to a method and a system for initializing x86 computer systems by using advanced firmware.
The xe2x80x9cIBM-compatiblexe2x80x9d computer system is well known and is widely used in many different areas of business, industry, government, and the home. More than 90 percent of the personal computer systems sold by the industry today are IBM-compatible. The vast majority of software programs written for personal computer systems are designed to function with the standard, IBM-compatible, x86 computer system. Each IBM-compatible computer system is substantially the same with regard to its basics functions as the original IBM PC AT (sometimes referred to as PS/2) computer system introduced in 1984.
The IBM PC AT computer (hereinafter referred to as the IBM PC) was built upon what became known as the industry standard architecture. This architecture is based upon various attributes of the IBM PC computer system. As is well known, the original IBM PC was based upon an Intel x86 microprocessor (e.g., the Intel 80286) and ran software written to the Intel x86 instruction set. The architecture of the IBM PC was comprised of various discrete hardware components (e.g., such as interrupt controller chips, input output controller chips, and the like) and basic functional software, or boot software, stored in non-volatile memory chips.
The most basic operations of the IBM PC were controlled by this basic functional software component stored in a ROM chip, referred to as basic input output system software, or xe2x80x9cBIOSxe2x80x9d. When the computer system is initially powered on, the BIOS software is the executed from non-volatile memory and initializes the various discrete hardware components to place the computer system into a state of readiness, wherein the system is able to subsequently execute software from a coupled mass storage device (e.g., a floppy disk, a hard drive, etc.). Each of these attributes comprise portions of the IBM PC compatible architecture and define what it means to be xe2x80x9cIBM-compatiblexe2x80x9d. Software programmers and hardware device designers became intimately familiar with these attributes of the IBM PC and the IBM PC compatible architecture. There software programs and hardware devices are designed to access the innermost data structures, addresses, I/O registers, and other such attributes. Thus, these attributes have become known as, essentially, the xe2x80x9cIBM-compatible APIxe2x80x9d, since software engineers/hardware designers write their various applications/hardware devices to directly access and/or utilize these attributes.
For example, to be software compatible, a software application must be able to run on an IBM PC. The software application must be able to interface with the specific addresses of certain discrete hardware components, specific input output register addresses, specific memory locations defined by the BIOS to perform certain functions, and the like, on the IBM PC. Each of these various attributes determine whether a software program is IBM-compatible or not.
With respect to IBM-compatible computer systems, to be hardware compatible, a computer system from a different manufacturer (e.g., Compaq) must be able to successfully run software applications written specifically for the IBM PC. To be hardware compatible, a computer system must use the same specific addresses for the same specific functions, utilize the same input output registers at the same addresses, perform the same BIOS functions by accessing the identical memory locations, and the like.
Essentially, to be IBM-compatible, a manufacturer had to build its respective computer system using substantially the same hardware components and executing the same software for implementing its most basic functions, such as BIOS software, as the IBM PC. To use different hardware (e.g., interrupt controller""s, memory controllers, bus interfaces, or the like), or to use different BIOS software meant risking hardware and/or software compatibility and risking the possibility of not being able to run IBM-compatible software applications or to use IBM-compatible hardware devices.
This had a practical effect of freezing the basic hardware and basic software of all IBM-compatible computer systems at the IBM PC level. To maintain compatibility with the large number of previously written software programs and previously designed hardware devices, commonly referred to as legacy programs and legacy hardware, each successive generation of computer systems remained substantially the same as the IBM PC. Thus, while the industry has progressed by several generations from the Intel 286 microprocessor used in the original IBM PC (e.g., the Pentium II, AMD K6, etc.) the most basic functionality of all IBM-compatible computer systems remains the same.
The problem with this situation is the fact that in order to remain compatible, computer manufacturers have had to retain this most basic functionality of the IBM PC, regardless of how out of date, or how unsuited to task, this basic functionality has become. Computer manufacturers have been unable to incorporate advances or improvements to this functionality without sacrificing compatibility with legacy programs and legacy hardware. As specific user applications have increased in sophistication, so to have demands for reliability, performance, and availability of the computer systems. These demands are becoming increasingly difficult to satisfy given the xe2x80x9cprimitivexe2x80x9d state of the most basic functionality of IBM-compatible computer systems. Computer systems are now several orders of magnitude more capable and more sophisticated than the original IBM PC. However, the systems still must use the same BIOS software and boot through the same sequence of operations as the original IBM PC, or risk sacrificing compatibility with legacy programs and legacy hardware.
For example, it would be very desirable to build a modern computer system which incorporates modern firmware. Modern firmware uses up-to-date, current design practices to implement the most basic functions of a computer system. Modern firmware is designed to present very structured, standardized, APIs to applications running on the computer system. Such a modern computer system would take advantage of all the advances in computer system technology. Such a system would use state-of-the-art components and use state-of-the-art programming techniques. Such a modern computer system would provide a huge vantages in terms of its usability, its reliability, and its ability to incorporate much more modern subsystems (e.g., a modern graphics rendering pipe line, modern hardware peripheral interfaces, and the like).
The problem with this solution, however, is the fact that, as described above, the vast majority of preexisting software programs (e.g., word processors, spreadsheets, games, etc.) and hardware peripherals (e.g., software add on cards, serial port devices, parallel port devices, etc.) for personal computers are written to the specific attributes and APIs presented by IBM-compatible computer systems. In designing a computer system which boots from and operates with a modern firmware architecture, the IBM PC hardware and the associated IBM PC BIOS is abandoned. Without this xe2x80x9cIBM-compatible APIxe2x80x9d, virtually all the preexisting hardware peripherals and software applications cannot run. This is unacceptable to the average user.
One solution to this problem is software based emulation of the IBM PC. This involves translating the instructions from one format to another using a software emulation program, and executing the translated instructions on the host system, wherein the translated instructions are native instructions and execute natively. An example of such a program would be SoftWindows from Insignia, wherein the underlying hardware would be a RISC-based machine (e.g., a MIPS based computer system running Unix) and wherein SoftWindows translates instructions from an emulated application (e.g., a Windows application) into native instructions for execution on the MIPS based computer system. The problem with this solution is that it is too slow. Full software based emulation adds to much processing xe2x80x9coverheadxe2x80x9d to allow the emulated application to run efficiently.
Another solution would be to include hardware support for both a legacy IBM PC a new advanced firmware, wherein the computer system boots to an IBM-compatible mode when running legacy applications and boots to the advanced firmware when running applications designed to the APIs of the new firmware. The problem with this solution is that it wastes large amounts of resources with a machine having two separate and distinct personalities. It essentially combines the hardware of two computer systems, one modern and one old, into a single computer system. Such a dual personality system wastes hardware regardless of which mode it runs in.
Thus, what is needed is a system which provides the best of both worlds. What is required is a system which maintains IBM PC compatibility and yet provides the benefits of an advanced firmware architecture. What is needed is a system which is able to boot using advanced firmware architecture yet retains compatibility with legacy hardware and legacy software. What is needed is a system which provides the advances of the modern firmware designs while preserving the ability to accommodate the legacy hardware devices and run legacy software applications. The required system needs to be able to run both modern and legacy applications efficiently and quickly with a minimum amount of processing overhead. What is needed is a system which supports legacy applications/hardware without requiring the duplication of the IBM PC API hardware/BIOS. The present invention provides a novel solution to these requirements.
The present invention provides a system that maintains IBM PC compatibility and yet provides the benefits of an advanced firmware architecture. The system of the present invention is able to boot using advanced firmware architecture and yet retains compatibility with legacy hardware and legacy software. The system of the present invention provides the advances of a modern firmware architecture and the associated programming interfaces while preserving the ability to accommodate the legacy hardware devices and run legacy software applications. The present invention provides both a method and a system able to run both modern applications and legacy applications efficiently and quickly, with a minimum amount of processing overhead. In addition, of the present invention supports legacy software/hardware without requiring the duplication of the IBM PC API hardware/BIOS.
In one embodiment, the present invention is implemented as an x86 based computer system which incorporates an advanced firmware that implements a boot process for new initializing the x86 computer system without requiring the execution of a conventional x86 bios or the incorporation of bios specific IBM PC hardware. The computer system includes one or more x86 processor(s) coupled to a volatile memory (e.g., SDRAM, etc.) and a non-volatile memory (e.g., a flash memory, etc.) via one or more buses. The non-volatile memory stores the software comprising the advanced firmware of the present invention.
In this implementation, the computer system is based upon a new architecture that takes advantage of modern design techniques and design features to provide sophisticated capabilities and functions. The present invention functions in part by providing compatibility for legacy (e.g., IBM-compatible) software applications and legacy hardware devices. The advanced firmware of the present invention boots the computer system into an initial state capable of supporting both modern software applications designed to xe2x80x9cmodernxe2x80x9d APIs provided by the advanced firmware, or legacy IBM compatible APIs in accordance with an IBM-compatible computer system.
Upon a system reset, or upon initial power up, the computer system of the present invention begins executing the instructions of the advanced firmware. These instructions cause the computer system to initialize its associated device drivers and internal hardware, thereby xe2x80x9cbootingxe2x80x9d the computer system. The advanced firmware initializes device drivers for the computer system, thereby making available the capabilities of the coupled devices (e.g., initializing mass storage devices such as a hard drive). The advanced firmware then initializes its APIs for supporting xe2x80x9cmodernxe2x80x9d software programs.
The advanced firmware also initializes a xe2x80x9cvirtual compatibility machinexe2x80x9d for supporting legacy software programs and legacy hardware devices. In one implementation, the virtual compatibility machine is a software based model instantiated by the modern firmware in volatile memory. The virtual compatibility machine includes a plurality of compatibility models which function by modeling aspects of an IBM PC compatible API. The compatibility models emulate corresponding aspects of an IBM PC compatible machine which are accessed by legacy software applications or legacy hardware devices during their operation. The compatibility models provide the IBM-compatible type interfaces expected by the legacy software programs or legacy hardware devices. The virtual compatibility machine translates functions (e.g., BIOS calls, accesses, etc.) performed by legacy software programs/hardware devices with the compatibility models, into corresponding functions performed by the device drivers and hardware of the computer system.
The advanced firmware also executes a portion of a IBM compatible BIOS in order to create a memory footprint required to support certain accesses of IBM compatible software/hardware. The software/hardware interacts with this memory footprint transparently, as if interfacing with an actual IBM compatible machine. The virtual compatibility machine translates functions, calls, accesses, etc., by legacy software programs/hardware devices to the compatibility models into corresponding functions performed by the device drivers and hardware of the computer system. Together, the virtual compatibility machine and the memory footprint provide the required environment for supporting legacy software applications/hardware devices.
In so doing, the system of the present invention provides the advances of a modern firmware, its associated programming interfaces, and a new modern architecture of the computer system itself, while preserving the ability to accommodate the legacy hardware devices and run legacy software applications. Modern software programs can access the advanced capabilities of the computer system by directly accessing the APIs of the modern firmware. Legacy software programs/hardware devices are supported with a minimum of processing overhead without requiring the expensive duplication of older, outdated IBM compatible hardware and BIOS software. This makes the computer system much faster and much more reliable.